package fr.cdesire.sudoku.applet.utils;

import java.text.MessageFormat;
import java.util.ResourceBundle;

public class Message {
	
	private static final String RESOURCES_FILE = "fr/cdesire/sudoku/applet/internationalization/messages";
	
	public enum LevelEnum {
		
		INFO,
		WARN,
		ERROR;
	}
	
	public enum MessageEnum {
		
		MESSAGE_ACCUEIL(LevelEnum.INFO),
		MESSAGE_COMPLETER(LevelEnum.INFO),
		MESSAGE_SOLUTION_TROUVEE(LevelEnum.INFO),
		MESSAGE_CHARGEMENT_GRILLE(LevelEnum.INFO),
		MESSAGE_ERREUR_GRILLE_INVALIDE(LevelEnum.ERROR),
		MESSAGE_ERREUR_GRILLE_INCOMPLETE(LevelEnum.WARN),
		MESSAGE_ERREUR_GRILLE_PLUSIEURS_SOLUTION(LevelEnum.ERROR),
		MESSAGE_ERREUR_GRILLE_AUCUNE_SOLUTION(LevelEnum.ERROR),
		MESSAGE_ERREUR_TECHNIQUE(LevelEnum.ERROR),
		MESSAGE_ERREUR_GRILLE_TROP_VALEUR(LevelEnum.ERROR);
		
		private LevelEnum niveau;
		
		private MessageEnum(LevelEnum niveau) {
			this.niveau = niveau;
		}

		public LevelEnum getNiveau() {
			return niveau;
		}
	}
	
	private String messageDefilant;
	private ResourceBundle messages;
	private LevelEnum niveau;
	
	public Message() {
		
		this.messages = ResourceBundle.getBundle(RESOURCES_FILE);
		this.update(MessageEnum.MESSAGE_ACCUEIL);
	}

	@Override
	public String toString() {
		return this.messageDefilant;
	}

	public void update(MessageEnum message, Object... params) {
		this.messageDefilant = MessageFormat.format(messages.getString(message.name()), params);
		this.niveau = message.getNiveau();
	}

	public LevelEnum getNiveau() {
		return niveau;
	}
}
